#ifndef WEATHERDATA_H
#define WEATHERDATA_H

#include <QString>
#include <QDate>
#include <QTime>
#include <QJsonObject>
#include <QJsonArray>
#include <QVector>

// 城市信息类
class CityInfo {
public:
    QString city;      // 城市名称
    QString cityKey;   // 城市编码
    QString parent;    // 省份
    QString updateTime;// 更新时间

    // 从JSON对象解析
    static CityInfo fromJson(const QJsonObject &json);
};

// 预报信息类
class Forecast {
public:
    QString date;      // 日期(日)
    QString high;      // 最高温度
    QString low;       // 最低温度
    QDate ymd;         // 完整日期
    QString week;      // 星期
    QTime sunrise;     // 日出时间
    QTime sunset;      // 日落时间
    int aqi;           // 空气质量指数
    QString fx;        // 风向
    QString fl;        // 风力
    QString type;      // 天气类型
    QString notice;    // 注意事项

    // 从JSON对象解析
    static Forecast fromJson(const QJsonObject &json);
};

// 昨日天气类
class Yesterday {
public:
    QString date;      // 日期(日)
    QString high;      // 最高温度
    QString low;       // 最低温度
    QDate ymd;         // 完整日期
    QString week;      // 星期
    QTime sunrise;     // 日出时间
    QTime sunset;      // 日落时间
    int aqi;           // 空气质量指数
    QString fx;        // 风向
    QString fl;        // 风力
    QString type;      // 天气类型
    QString notice;    // 注意事项

    // 从JSON对象解析
    static Yesterday fromJson(const QJsonObject &json);
};

// 天气数据类
class WeatherData {
public:
    QString message;   // 消息
    int status;        // 状态码
    QDate date;        // 日期
    QDateTime time;    // 时间
    CityInfo cityInfo; // 城市信息

    // 当前天气数据
    QString shidu;     // 湿度
    double pm25;       // PM2.5
    double pm10;       // PM10
    QString quality;   // 空气质量
    double wendu;      // 温度
    QString ganmao;    // 感冒提示

    QVector<Forecast> forecast; // 天气预报
    Yesterday yesterday;        // 昨日天气

    // 从JSON对象解析
    static WeatherData fromJson(const QJsonObject &json);
};

#endif // WEATHERDATA_H